$(function () {

    var edit_dialog =  $('#edit_dialog');
    var edit_form =  $('#edit_form');
    var role_datagrid =  $('#role_datagrid');
    var allPers_datagrid = $('#allPers_datagrid');
    var selfPers_datagrid = $('#selfPers_datagrid');

    //数据表格
    $('#role_datagrid').datagrid({
        url:'/role/list.do',
        striped:true,
        fitColumns:true,
        singleSelect:true,
        pagination:true,
        rownumbers:true,
        toolbar:"#tb",
        columns:[[
            {field:'id',hidden:true,width:100},
            {field:'name',title:'角色名称',width:100,align:'center'},
            {field:'sn',title:'角色编码',width:100,align:'center'},

        ]]
    });
    //end

    //系统权限缓存数据
    var allPers;
    //系统权限初始化
    $('#allPers_datagrid').datagrid({
        wight:300,
        height:450,
        url:'/permission/list.do',
        striped:true,
        singleSelect:true,
        pagination:true,
        rownumbers:true,
        columns:[[
            {field:'id',hidden:true},
            {field:'name',title:'权限名称',width:80,align:'center'},
            {field:'resource',title:'权限表达式',width:250,align:'center'},
        ]],
        //设置双击事件
        onDblClickRow:function (index, row) {
            //系统权限删除
            allPers_datagrid.datagrid("deleteRow",index);
            //自身权限添加
            selfPers_datagrid.datagrid("appendRow",row);
        },
        //当系统权限加载成功时(当刷新页面时,就会初始化加载datagrid数据表格中的数据)
        onLoadSuccess:function (data) {
            //使用深度拷贝将加载成功的数据放入缓存数据allPers中
            //在后面做删除操作data数据,也不会影响到allPers数据
            allPers = $.extend(true,{},data);
        }
    });
    //end

    //自身权限初始化
    $('#selfPers_datagrid').datagrid({
        wight:300,
        height:450,
        striped:true,
        fitColumns:true,
        singleSelect:true,
        rownumbers:true,
        columns:[[
            {field:'id',hidden:true,width:100},
            {field:'name',title:'权限名称',width:100,align:'center'},
            {field:'resource',title:'权限表达式',width:100,align:'center'},

        ]],
        onDblClickRow:function (index, row) {
            //自身权限删除
            selfPers_datagrid.datagrid("deleteRow",index);
            //系统权限添加
            allPers_datagrid.datagrid("appendRow",row);
        },
        //当自身权限加载成功时候,系统权限一定也是加载成功的(因为表格在刷新页面就做初始化了)
        //此时做编辑去重
        onLoadSuccess:function (data) {
            //获取自身权限的id集合
            var ids = $.map(data.rows,function (item) {
                return item.id;
            })
            console.log(ids);

            //获取系统权限的id,判断其是否在自身权限ids中
            var allRows = allPers_datagrid.datagrid("getRows");
            //因为获取的allRows真实类型是Object是伪数组,要使用原始的for循环
            for (var i = allRows.length - 1; i >=0; i--){
                if ($.inArray(allRows[i].id,ids) >= 0){
                    allPers_datagrid.datagrid("deleteRow",i);
                }
            }
        }
    });
    //end



    var cmdObj = {
        //添加按钮添加角色
        add : function () {

            edit_dialog.dialog("setTitle","添加角色");

            edit_form.form("clear");

            edit_dialog.dialog("open");

            //添加操作时,右边的权限应该是空的
            selfPers_datagrid.datagrid("loadData",[]);

            //当将系统权限移至自身权限,再做添加操作,需要复原左边(加载缓存数据)
            allPers_datagrid.datagrid("loadData",allPers);
        },
        //编辑按钮编辑角色
        edit : function () {

            var row = role_datagrid.datagrid("getSelected");
            if (!row){
                $.messager.alert("温馨提示","请选择要编辑的角色","info");
                return;
            }

            edit_dialog.dialog("setTitle","编辑角色");

            //在读取数据之前,清除缓存
            edit_form.form("clear");

            edit_form.form("load",row);


            //编辑操作时,左边的系统权限应该复原(稍后排重)
            allPers_datagrid.datagrid("loadData",allPers);

            //当编辑对话框打开之前应该发一个请求获取当前角色所拥有的权限
            //使用datagrid中的options方法,获取表格初始化时的url参数,给其赋值
            var options = selfPers_datagrid.datagrid("options");
            options.url = "/permission/getPermissionByRoleId.do?id=" + row.id;
            //加载后重新刷新页面
            selfPers_datagrid.datagrid("load");


            //打开对话框
            edit_dialog.dialog("open");
        },

        //save按钮提交表单
        save : function () {

            var url = "";

            var id = $("#deptId").val();

            if(id){
                url = "/role/update.do";
            }else{
                url = "/role/save.do";
            }

            edit_form.form('submit', {
                url:url,
                success: function(data){
                    var data = eval('(' + data + ')');
                    if (data.success){
                        $.messager.confirm('温馨提示','操作成功',function(r){
                            edit_dialog.dialog("close");
                            role_datagrid.datagrid("load");
                        });
                    }else{
                        $.messager.alert("温馨提示",data.msg);
                    }
                },
                //当表单提交时,携带额外的参数,将所选中行的权限id传入后台,进行保存角色的权限操作
                onSubmit:function (param) {
                    //获取要添加的自身权限
                    var rows = selfPers_datagrid.datagrid("getRows");
                    for (var i=rows.length - 1; i >=0; i--) {
                        param["permissions["+ i +"].id"] = rows[i].id;
                    }
                }
            });
        },
        //编辑的关闭按钮功能
        cancel : function () {
            edit_dialog.dialog("close");
        },
        //删除角色
        remove : function () {
            var row = role_datagrid.datagrid("getSelected");
            if (!row){
                $.messager.alert("温馨提示","请选择要删除的角色","info");
                return;
            }

            $.messager.confirm('确认','您确认想要删除记录吗？',function(r){
                if (r){
                    $.get("/role/delete.do?id=" + row.id,function (data) {
                        if (data.success){
                            $.messager.confirm('温馨提示','删除成功',function(r){
                                role_datagrid.datagrid("load");
                            });
                        }else{
                            $.messager.alert("温馨提示",data.msg,"error");
                        }
                    })
                }
            });
        },
        //刷新
        reload :function () {
            role_datagrid.datagrid("reload");
        }

    }

    //抽取优化
    $("a").click(function () {
        var cmd = $(this).data("cmd");

        cmdObj[cmd]();
    })
    //end
    

    //dialog弹窗
    $('#edit_dialog').dialog({
        title: 'My Dialog',
        buttons:"#bb",
        closed:true,
        width: 700,
        height: 550,
    });
    //end

})//end













